package cn.wolfcode.wolf2w.business.listener;

import cn.wolfcode.wolf2w.business.api.domain.Strategy;
import cn.wolfcode.wolf2w.business.api.domain.StrategyEs;
import cn.wolfcode.wolf2w.business.repostory.StrategyEsRepository;
import com.alibaba.fastjson.JSON;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.json.Json;

@Component
public class StrstegyRabbitListener {


@Autowired
private StrategyEsRepository repository;
    // @RabbitListener：作用是指定一个方法监听 RabbitMQ 中的strategyQueue队列，当队列中有新消息时，自动触发该方法进行消息处理。
    //queues = {"strategyQueue"}指定当前消费者要监听的队列名称，
    //      这里表示监听名为strategyQueue的队列（可同时监听多个队列，用数组形式指定，如queues = {"queue1", "queue2"}）。
    @RabbitListener(queues = {"strategyQueue"})
    //将接收到的 JSON 格式消息转换为指定实体类，并同步保存到 Elasticsearch 中
    public void onMessage(String message) {
        //JSON 反序列化，将接收到的 JSON 消息转换为业务实体类Strategy的对象strategy，便于后续处理。
        Strategy strategy = JSON.parseObject(message, Strategy.class);
        //创建 Elasticsearch 实体对象
        StrategyEs es = new StrategyEs();
        //是 Spring 框架的工具类方法，用于将源对象（strategy）的属性值拷贝到目标对象（es）中。
        BeanUtils.copyProperties(strategy, es);
        //完成数据从消息到 ES 的最终同步，后续可通过 ES 实现高效的全文检索。
        repository.save(es);
    }

}
